package elm.controller;

import elm.dao.UserDao;
import elm.entity.po.User;
import elm.entity.po.vo.UserRequest;
import elm.service.UserService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;

import java.util.Collections;

/**
 * 用户信息管理控制器
 * 提供用户数据的管理接口，包括：
 * - 用户登录验证
 * - 新用户注册
 */
@RestController
@RequestMapping("/user")
@Tag(name = "用户信息管理接口")
public class UserController {
    @Resource
    private UserDao userDao;

    @Resource
    private UserService userService;

    /**
     * 用户登录验证接口
     * 验证手机号和密码是否匹配
     *
     * @param phone    用户手机号
     * @param password 用户密码
     * @return 登录结果信息（成功/失败）
     * 接口示例：/user/login?phone=1234567890&password=test123
     * 数据验证：通过findUserByPhoneAndPassword方法进行凭证校验
     */
    @PostMapping("/login")
    @Operation(summary = "用户登录验证")
    public User login(
            @Parameter(name = "phone", description = "用户手机号", required = true, example = "1234567890")
            @RequestParam("phone") String phone,
            @Parameter(name = "password", description = "用户密码", required = true, example = "test123")
            @RequestParam("password") String password) {

        return userDao.findUserByPhoneAndPassword(phone, password) ;
    }

    /**
     * 新用户注册接口
     * 创建新用户并保存到数据库
     *
     * @param phone    用户手机号
     * @param password 用户密码
     * @param sex      用户性别
     * @return 注册结果信息（成功提示）
     * 接口示例：/user/add?phone=1234567890&password=test123&sex=男
     * 业务处理：构建UserRequest对象并调用service层注册方法
     */
    @PostMapping("/add")
    @Operation(summary = "新用户注册")
    public String register(
            @Parameter(name = "phone", description = "用户手机号", required = true, example = "1234567890")
            @RequestParam("phone") String phone,
            @Parameter(name = "password", description = "用户密码", required = true, example = "test123")
            @RequestParam("password") String password,
            @Parameter(name = "sex", description = "用户性别", required = true, example = "男")
            @RequestParam("sex") String sex) {

        UserRequest userRequest = new UserRequest(phone, password, sex);
        // 调用 service 层注册方法
        return userService.register(userRequest);
    }
}
